import { defineStore } from 'pinia'
import { getSimpleDictDataList } from '@/api/dict'

export interface DictValueType {
  value: any
  label: string
  colorType?: string // 修正拼写错误 clorType → colorType
  cssClass?: string
}

export interface DictState {
  dictMap: Record<string, DictValueType[]> // 使用普通对象替代 Map
  isSetDict: boolean
}

export const useDictStore = defineStore(
  'dict',
  () => {
    const dictMap = ref<Record<string, DictValueType[]>>({})
    const isSetDict = ref<boolean>(false)

    const getDictMap = () => {
      try {
        const cache = uni.getStorageSync('dict')
        if (cache) {
          dictMap.value = JSON.parse(cache) // 反序列化
        }
        return dictMap.value
      }
      catch (e) {
        console.error('字典解析失败', e)
        return {}
      }
    }
    const getIsSetDict = () => {
      return isSetDict.value
    }
    const fetchAndSetDict = async () => {
      try {
        const res = await getSimpleDictDataList()
        const dictDataMap: Record<string, DictValueType[]> = {}
        const data: any = res.data
        data.forEach((dictData: any) => {
          const dictType = dictData.dictType
          if (!dictDataMap[dictType]) {
            dictDataMap[dictType] = []
          }

          dictDataMap[dictType].push({
            value: dictData.value,
            label: dictData.label,
            colorType: dictData.colorType,
            cssClass: dictData.cssClass,
          })
        })

        dictMap.value = dictDataMap
        isSetDict.value = true
        uni.setStorageSync('dict', JSON.stringify(dictDataMap)) // 序列化存储
      }
      catch (error) {
        console.error('获取字典失败', error)
        throw error
      }
    }
    const setDictMap = async () => {
      try {
        const cache = uni.getStorageSync('dict')
        if (cache) {
          dictMap.value = JSON.parse(cache)
          isSetDict.value = true
        }
      }
      catch (e) {
        console.error('本地字典缓存异常', e)
        return {}
      }
      await fetchAndSetDict()
    }
    const getDictByType = (type: string) => {
      if (!isSetDict.value) {
        setDictMap()
      }
      return dictMap.value[type] || []
    }

    const resetDict = async () => {
      try {
        uni.removeStorageSync('dict')
        await fetchAndSetDict()
      }
      catch (e) {
        console.error('重置字典失败', e)
      }
    }
    return {
      dictMap,
      isSetDict,
      getDictMap,
      getIsSetDict,
      setDictMap,
      getDictByType,
      resetDict,
    }
  },
  {
    persist: true,
  },
)

// export const useDictStore = defineStore('dict', {
//   state: (): DictState => ({
//     dictMap: {},
//     isSetDict: false,
//   }),

//   getters: {
//     getDictMap(): Record<string, DictValueType[]> {
//       try {
//         const cache = uni.getStorageSync('dict')
//         if (cache) {
//           this.dictMap = JSON.parse(cache) // 反序列化
//         }
//         return this.dictMap
//       }
//       catch (e) {
//         console.error('字典解析失败', e)
//         return {}
//       }
//     },
//     getIsSetDict(): boolean {
//       return this.isSetDict
//     },
//   },

//   actions: {
//     async setDictMap() {
//       try {
//         const cache = uni.getStorageSync('dict')
//         if (cache) {
//           this.dictMap = JSON.parse(cache)
//           this.isSetDict = true
//           return
//         }
//       }
//       catch (e) {
//         console.warn('本地字典缓存异常', e)
//       }

//       await this.fetchAndSetDict()
//     },

//     async fetchAndSetDict() {
//       try {
//         const res = await getSimpleDictDataList()
//         const dictDataMap: Record<string, DictValueType[]> = {}

//         res.forEach((dictData: any) => {
//           const dictType = dictData.dictType
//           if (!dictDataMap[dictType]) {
//             dictDataMap[dictType] = []
//           }

//           dictDataMap[dictType].push({
//             value: dictData.value,
//             label: dictData.label,
//             colorType: dictData.colorType,
//             cssClass: dictData.cssClass,
//           })
//         })

//         this.dictMap = dictDataMap
//         this.isSetDict = true
//         uni.setStorageSync('dict', JSON.stringify(dictDataMap)) // 序列化存储
//       }
//       catch (error) {
//         console.error('获取字典失败', error)
//         throw error
//       }
//     },

//     getDictByType(type: string): DictValueType[] {
//       if (!this.isSetDict) {
//         this.setDictMap()
//       }
//       return this.dictMap[type] || []
//     },

//     async resetDict() {
//       try {
//         uni.removeStorageSync('dict')
//         await this.fetchAndSetDict()
//       }
//       catch (e) {
//         console.error('重置字典失败', e)
//       }
//     },
//   },
//   // 添加持久化配置
//   persist: {
//     key: 'dict-storage', // 指定一个存储的key
//     storage: {
//       getItem(key) {
//         return uni.getStorageSync(key)
//       },
//       setItem(key, value) {
//         return uni.setStorageSync(key, value)
//       },
//     },
//   },
// })
